package StudyTest;

/**
 *
 * 递归方法的使用
 * 1.递归方法：一个方法体制内调用它自身
 * 2.方法递归包含了一种隐式的循环，他会重复执行某段代码，但这种重复执行无需循环控制
 *   递归一定要已知方向递归，否则这种递归就变成了无穷递归，类似于死循环
 * 3.
 *
 *
 * */

public class RecursionTest {

    //例1、计算1-100之间所有自然数的和
    public static void main(String[] args) {

        int sum = 0;
        for (int i = 0; i < 101; i++) {
            sum += 1;
        }
        System.out.println(sum);

    }

    //例1：计算1-n之间所有自然数的和
    public int getSum(int n){
        if(n == 1 ){
            return 1;
        }else{
            return n + getSum(n-1);
        }
    }

    //例2.计算1-n之间所有自然数的积：n！
    public int getSum1(int n){
        if(n == 1 ){
            return 1;
        }else{
            return n * getSum(n-1);
        }
    }

    //例3.已知有一个数列：f(0) = 1,f(1) = 4, f( n + 2) = 2 * f(n + 1) + f(n)
    //其中n是大于0的整数，求f（10）的值
    public int f(int n){
        if (n == 0){
            return 1;
        }else if (n == 1){
            return 4;
        }else {
            return 2*f(n - 1) + f(n -2);
        }
    }

    //例4.输入一个数据n，计算斐波那契数列（Fibonacci）的第n个值
    //1 1 2 3 5 8 13 21 34 55

    //例5.汉诺塔问题

    //例6.快排


}
